fn = function(a,b){
    console.log(a+b);
}
fn(4,6)

// 箭头函数 无function关键字 在函数参数与参数体之间用箭头链接
let fn = (a,b)=>{
    console.log(a+b);
}
fn(3,4);

// 当函数只有一个形参  小括号可以省略
let fn2 = a=>{
    console.log(a);
};
fn2(3);

let fn3 = (m,n) =>{
    return m+n;
}
// 上面的只有一条return语句 可以简写为下面的省略大括号
let fn3 = (m,n)=>m+n;
console.log(fn3(4,8));

// 可以给形参设置默认值
let fn3 = (m=0,n=0)=>m+n;
console.log(fn3(4,1));

let fun = x=>y=>x+y;
let res = fun(5)(6);
console.log(res);

function fun(x){
    return function(y){
        return x+y;
    }
}

// 1. 箭头函数内部没有arguments
function fn(...arguments){
    console.log(arguments)
}
fn(2);

//  ...剩余运算符
let fn4 = (a,...arguments)=>{
    console.log(arguments); //数组
 }
 fn4(1,2,3,4)


// 2.箭头函数中没有自己的执行主体 this

let obj = {
    fn:(function(){
        console.log(this); //window
        let _this = this;
        return function(){
            console.log(_this)
        }
    })
}
// obj.fn(); //对象打点调用  那么函数中的this就是这个对象
// obj.fn.call(window); //普通函数可以通过call去改变this
obj.fn();

//箭头函数的this与执行环境有关，继承上下文  无法通过call/apply/bind 改变箭头
//函数的this
let obj = {
    fn:(function(){
        return ()=>{
            console.log(this);
        }
    })
}
obj.fn.call(obj);